package com.scalar.chiptrack.operations.dataentry.assembly.actioncommands;

import com.scalar.chiptrack.actioncommands.ActionCommand;
import com.scalar.chiptrack.users.User;
import com.scalar.chiptrack.users.Functionality;
import com.scalar.chiptrack.operations.dataentry.dao.DataEntryDAO;
import com.scalar.chiptrack.operations.dataentry.LotDetails;
import com.scalar.chiptrack.operations.dataentry.assembly.forms.AssemblyDataEntryForm;
import com.scalar.chiptrack.operations.process.dao.PartNumber;
import com.scalar.chiptrack.commons.SessionKeys;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionForm;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.util.HashMap;
import java.util.ArrayList;

/**
 * Created by IntelliJ IDEA.
 * User: Sudhakar
 * Date: Sep 28, 2006
 * Time: 1:09:00 AM
 */
public class AssemblyDataEntrySaveCommand extends ActionCommand
{
    private static final String ACTION_NAME = "/assemblyDataEntry.do";

    public ActionForward execute(ActionMapping mapping,
                                 ActionForm form,
                                 HttpServletRequest request,
                                 HttpServletResponse response) throws Exception
    {

        AssemblyDataEntryForm assemblyDataEntryForm = (AssemblyDataEntryForm) form;

        HashMap errors = new HashMap();
        HashMap info = new HashMap();
        String action = request.getParameter("action");

        request.setAttribute(INFO_MESSAGES, info);
        request.setAttribute(ERROR_MESSAGES, errors);


        HttpSession mSession = request.getSession();
        User user = (User) mSession.getAttribute(SessionKeys.USER_KEY);

        if (user == null) {
            mSession.setAttribute(SessionKeys.SOURCE_PAGE_KEY, ACTION_NAME);
            return (mapping.findForward("login"));
        } else {
            if (user.isActionAllowed(Functionality.DATA_ENTRY, User.USER_ACTION_MODIFY)) {
                request.setAttribute("showMessage", "FALSE");
            } else {
                request.setAttribute("showMessage", "TRUE");
            }
        }

        ArrayList assemblyWipList = new ArrayList();
        ArrayList partNumberList;
        PartNumber partNumber;
        ArrayList assemblyPartNumbersLableValueBeans = new ArrayList();

        LotDetails assemblyLotDetails = assemblyDataEntryForm.getAssemblyLotDetails();
        assemblyLotDetails.setProcessStepId(assemblyDataEntryForm.getProcessStepId());
        assemblyLotDetails.setLocationId(assemblyDataEntryForm.getLocationId());
        assemblyLotDetails.setLotId(assemblyDataEntryForm.getLotId());
        assemblyLotDetails.setPoId(assemblyDataEntryForm.getPoId());

        if (assemblyLotDetails.getDieQtyOut().trim().length() <= 0 )
        {
            assemblyLotDetails.setDieQtyOut(null);
        }
        if (assemblyLotDetails.getDateOut().trim().length() <= 0)
        {
            assemblyLotDetails.setDateOut(null);
        }
        if( assemblyLotDetails.getFabLotNumber() == null )
        {
            assemblyLotDetails.setFabLotNumber( assemblyDataEntryForm.getFabLotNo() );
        }
        assemblyWipList.add(assemblyLotDetails);
        if (assemblyWipList != null && assemblyWipList.size() > 0)
        {
            try
            {
                DataEntryDAO.saveDataEntryAssemblyLot(null, assemblyWipList,user.getUserName() );
                info.put("Lot Information Saved", null);
                partNumberList = DataEntryDAO.getPartNumber(LOCATION_TYPE_ASSEMBLY);

                for (int i = 0; i < partNumberList.size(); i++)
                {
                    partNumber = (PartNumber) partNumberList.get(i);
                    assemblyPartNumbersLableValueBeans.add(new org.apache.struts.util.LabelValueBean(partNumber.getPartNumber(), partNumber.getProcessStepId()));
                    assemblyDataEntryForm.setProcessType(partNumber.getProcessType());
                }
                request.setAttribute("partNumbersList", assemblyPartNumbersLableValueBeans);
                request.setAttribute("action", action);
            }
            catch (Exception e)
            {
                e.printStackTrace();
                errors.put("Error storing the Assembly Lot information", null);
            }
        }

        assemblyDataEntryForm.setProcessStepId("0");
        assemblyDataEntryForm.setLocationId("0");
        assemblyDataEntryForm.setLotId("0");
        assemblyDataEntryForm.setPoId("0");
        assemblyDataEntryForm.setFabLotNo("0");

        return mapping.findForward("assemblyDataEntry");
    }
}
